package ar.com.aterrizar.filtrosBusqueda;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.LinkedList;

import ar.com.aterrizar.asientos.*;
import ar.com.aterrizar.entidades.Aeropuerto;
import ar.com.aterrizar.entidades.Cliente;

public class FiltroObligatorio implements Filtro {
	private String origen;
	private String destino;
	private long dias;
	private Cliente cliente;
	
	public FiltroObligatorio (String origen, String destino, String fecha, Cliente cliente){
		this.setOrigen(origen);
		this.setDestino(destino);
		this.setCliente(cliente);
		
		SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
	    Date date=new Date(0);
	    try{
	    	date = formatter.parse(fecha);
	    }catch(ParseException e){
	    	e.printStackTrace();
	    }
		this.setDias((date.getTime()/86400000));
	}

	public Collection<Asiento> filtrar(Collection<Asiento> asientos){
		Collection<Asiento> asientos_filtrados = new LinkedList<Asiento>();
		for(Asiento asiento: asientos){
			if((asiento.getDestino().equals(this.destino))&&
			   (asiento.getOrigen().equals(this.origen))&&
			   (asiento.getFechaDeSalidaYHora().getDia()- this.dias<=0)&&
			   (asiento.getFechaDeLlegadaYHora().getDia()-this.dias>=0)&&
			   (!asiento.estaComprado())&&
			   (!Aeropuerto.getInstance().estaSobreReservado(asiento, this.cliente))){				
					asientos_filtrados.add(asiento);
			}
		}
		return asientos_filtrados;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public String getDestino() {
		return destino;
	}

	public void setDestino(String destino) {
		this.destino = destino;
	}

	public String getOrigen() {
		return origen;
	}

	public void setOrigen(String origen) {
		this.origen = origen;
	}

	public long getDias() {
		return dias;
	}

	public void setDias(long dias) {
		this.dias = dias;
	}
}
